package com.woniu.config;

import cn.dev33.satoken.stp.StpInterface;
import com.woniu.service.AllUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author pml
 * @Date 2025/6/13 17:29
 * @Description TODO
 * SaToken权限接口实现类
 * 自定义权限验证逻辑，提供用户的角色和权限列表
 * SaToken会自动调用此类获取当前用户的角色和权限信息
 */
@Component
public class StpInterfaceImpl implements StpInterface {

    @Autowired
    private AllUserService allUserService;

    /**
     * 获取用户的权限列表
     * 目前系统暂未实现权限管理，返回空列表
     * 实际项目中可根据业务需求扩展权限功能
     * @param loginId 用户登录ID
     * @param loginType 登录类型
     * @return 权限列表
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        // 实际项目中需要根据用户ID查询数据库获取权限列表
        return new ArrayList<>();
    }

    /**
     * 获取用户的角色列表
     * 根据用户ID查询角色ID，并封装为角色字符串返回
     * 角色命名遵循Spring Security规范，以ROLE_为前缀
     * @param loginId 用户登录ID（即userId）
     * @param loginType 登录类型
     * @return 角色列表，格式为["ROLE_角色ID"]
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        List<String> roles = new ArrayList<>();
        try {
            // 将loginId转换为Integer类型的用户ID
            Integer userId = Integer.parseInt(loginId.toString());
            // 调用Service方法获取用户的角色ID
            Integer roleId = allUserService.getRoleIdByUserId(userId);
            // 如果角色ID不为空，添加到角色列表（角色通常以ROLE_为前缀）
            if (roleId != null) {
                roles.add("ROLE_" + roleId);
            }
        } catch (Exception e) {
            // 异常处理：转换失败或查询失败时返回空角色列表
            e.printStackTrace();
        }
        return roles;
    }
}